package baiqitun.stupro.security.service;

import baiqitun.stupro.common.service.MyService;
import baiqitun.stupro.security.entity.SysUser;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author kedaji
 * @since 2020-03-25
 */
public interface SysUserService extends MyService<SysUser> {

    /**
     * 重写父类方法，添加参数校验
     * 保存用户信息并对用户密码进行加密操作
     * @param user 用户信息
     * @return 操作是否成功
     */
    @Override
    boolean save(SysUser user);

    /**
     * 重写父类方法，添加参数校验
     * @param user 用户信息
     * @return 操作是否成功
     */
    @Override
    boolean updateById(SysUser user);

    /**
     * 通过用户名查找用户信息
     * @param username 用户名
     * @return 用户信息
     */
    SysUser getUserByUsername(String username);

    /**
     * 删除用户
     * @param id 用户 id
     * @param updateBy 修改人用户名
     * @return 操作是否成功
     */
    boolean removeById(String id, String updateBy);

    /**
     * 修改用户密码
     * @param id 用户id
     * @param newPassword 新密码
     * @param updateBy 修改人用户名
     */
    void updatePassword(String id, String newPassword, String updateBy);


    /**
     * 冻结账户
     * @param id 用户id
     * @param updateBy 修改人用户名
     */
    void makeUserDisable(String id, String updateBy);

    /**
     * 检查用户是否可用
     * @param id 用户id
     */
    void checkEnabled(String id);

    /**
     * 检查用户是否存在
     * @param username 用户名
     */
    void checkExistedByUsername(String username);

    /**
     * 获取可用的用户
     * @param id 用户id
     * @return 用户信息
     */
    SysUser getEnabledUser(String id);

    /**
     * 获取可用用户
     * @param username 用户名
     * @return 用户信息
     */
    SysUser getEnabledUserByUsername(String username);
}
